package com.jiyun.service.impl;

import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jiyun.mapper.ItemMapper;
import com.jiyun.pojo.Item;
import com.jiyun.pojo.JsonRes;
import com.jiyun.service.ItemService;
import com.jiyun.utils.AliyunOSSClientUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.multipart.MultipartFile;


import java.util.List;

/**
 * @author: 刘清芳
 * @description: impl
 * @date: 2023/12/19 20:11
 */
@Service
public class ItemServiceImpl extends ServiceImpl<ItemMapper, Item> implements ItemService {
    @Autowired
    ItemService itemService;


    //    添加和修改
    @PostMapping("/add")
    public void add(@RequestBody Item item) {
        itemService.saveOrUpdate(item);
    }

    //        展示
    @Override
    public List<Item> findAll(Item item) {
// 创建一个LambdaQueryWrapper对象
        LambdaQueryWrapper<Item> qw = new LambdaQueryWrapper<>();
// 如果item对象不为空
        if (item != null) {
            // 如果item的id不为空
            if (item.getId() != null) {
                // 使用LambdaQueryWrapper的eq方法，设置条件为id等于item的id
                qw.eq(Item::getId, item.getId());
            }
        }
// 如果item对象不为空
        if (item != null) {
            // 如果item的status不为空
            if (item.getStatus() != null) {
                // 使用LambdaQueryWrapper的eq方法，设置条件为status等于item的status
                qw.eq(Item::getStatus, item.getStatus());
            }
        }
// 使用LambdaQueryWrapper的like方法，设置条件为name模糊匹配item的name
        qw.like(StringUtils.isNotBlank(item.getName()),
                Item::getName,
                item.getName()
        );
// 使用LambdaQueryWrapper的orderByDesc方法，设置排序规则为paix降序，id降序
        qw.orderByDesc(Item::getPaix, Item::getId);
// 使用LambdaQueryWrapper的eq方法，设置条件为remove等于1
        qw.eq(Item::getRemove, 1);
// 使用LambdaQueryWrapper的eq方法，设置条件为pid等于-1
        qw.eq(Item::getPid, -1);
// 调用itemService的list方法，根据qw查询条件获取Item列表
        List<Item> list = itemService.list(qw);
// 遍历list列表
        for (Item item1 : list) {
            // 创建一个LambdaQueryWrapper对象
            LambdaQueryWrapper<Item> qw1 = new LambdaQueryWrapper<>();
            // 使用LambdaQueryWrapper的eq方法，设置条件为pid等于item1的id，remove等于1
            qw1.eq(Item::getPid, item1.getId()).eq(Item::getRemove, 1);
            // 调用itemService的list方法，根据qw1查询条件获取Item列表
            List<Item> list1 = itemService.list(qw1);
            // 将list1赋值给item1的itemlist属性
            item1.setItemlist(list1);
        }
// 返回list
        return list;
    }

//    名称查询
    @Override
    public List<Item> findAllName() {
        // 返回满足条件“Pid为-1”的Item列表
        return itemService.lambdaQuery().eq(Item::getPid,-1).list();

    }

//    逻辑删除
    @Override
    public JsonRes deleteById(Integer id) {
        //        先查询判断 是否有子集
        // 创建一个LambdaQueryWrapper对象，并用于指定查询条件
        LambdaQueryWrapper<Item> eq = new LambdaQueryWrapper<>();
        // 根据指定的条件对Item表中的pid字段进行模糊查询
        eq.like(Item::getPid, id);

        // 如果满足指定条件的记录数大于0，则返回错误信息
        if (itemService.count(eq) > 0) {
            return JsonRes.error("有分子集,不难删除");
        } else {
            // 根据id获取一个Item对象
            Item byId = itemService.getById(id);
            // 设置remove字段的值为0
            byId.setRemove(0);
            // 根据指定条件更新Item表中对应的记录
            itemService.updateById(byId);
            // 返回成功信息
            return JsonRes.success("删除成功");
        }
    }

    //    查询子集名称
    @Override
    public List<Item> findById(Integer id) {
        // 创建一个LambdaQueryWrapper对象，用于构建查询条件
        LambdaQueryWrapper<Item> wrapper = new LambdaQueryWrapper<>();
        // 根据Pid字段等于指定值(id)建立等式查询条件
        wrapper.eq(Item::getPid, id);
        // 根据建立的查询条件，获取符合条件的Item对象集合
        return itemService.list(wrapper);
    }
}
